package com.bbva.kyfb.kyfbutils.invoker;

import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean;

import com.bbva.jee.arq.spring.core.contexto.ArqSpringContext;
import com.bbva.jee.arq.spring.core.gce.ExcepcionEjecucionAplicacion;
import com.bbva.jee.arq.spring.core.util.excepciones.PropiedadNoEncontradaExcepcion;
import com.bbva.kyfb.kyfbdto.firmas.errores.Errores_kyfb_servicios;

public final class InvokerUtils {

	/**
	 * Utilidad para llamar a servicios HTTPInvoker
	 * 
	 * @param serviceUrl
	 * @param _class
	 * @return
	 */
	public static Object buildHttpInvokerProxyFactoryBean(
			final String serviceUrl, final Class<? extends Object> _class) {
		final HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean();
		proxy.setServiceInterface(_class);
		proxy.setServiceUrl(serviceUrl);
		proxy.afterPropertiesSet();
		return proxy.getObject();
	}

	/**
	 * @return
	 * @throws PropiedadNoEncontradaExcepcion
	 */
	public static Object getBeanInvoker(String propiedad,
			Class<? extends Object> clase) {
		Object infoUsuarios = null;

		try {
			String serviceUrl;
			serviceUrl = ArqSpringContext.getPropiedad(propiedad);
			infoUsuarios = buildHttpInvokerProxyFactoryBean(serviceUrl, clase);
		} catch (PropiedadNoEncontradaExcepcion e1) {
			throw new ExcepcionEjecucionAplicacion(
					Errores_kyfb_servicios.SERVICIO_NO_DISPONIBLE, e1);
		}
		return infoUsuarios;
	}
}
